// pages/yz/yz.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    wh: 0,
    // 默认后置摄像头
    position: "back",
    // 图片路径存放
    src: '',
    token: '',
    // 中英文映射对象
    map: {
      gender: {
        male: '男',
        female: '女'
      },
      expression: {
        none: '不笑',
        smile: '微笑',
        laugh: '大笑'
      },
      glasses: {
        none: '无眼镜',
        common: '普通眼镜',
        sun: '墨镜'
      },
      emotion: {
        angry: '愤怒',
        disgust: '厌恶',
        fear: '恐惧',
        happy: '高兴',
        sad: '伤心',
        surprise: '惊讶',
        neutral: '无表情',
        pouty: '撅嘴',
        grimace: '鬼脸'
      }
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取设备信息
    const info = wx.getSystemInfoSync()
    this.setData({
      wh: info.screenHeight
    })
    console.log(info);
  },
  // 切换摄像头
  reverse() {
    this.setData({
      position: this.data.position === 'back' ? 'front' : 'back'
    })
  },
  // 点击摄像头实现拍照功能
  takePhoto() {
    // 创建拍照的上下文对象
    const ctx = wx.createCameraContext()
    // 调用takePhoto函数拍照
    ctx.takePhoto({
      quality: 'high',
      success: res => {
        this.setData({
            src: res.tempImagePath
          },
          //  成功赋值之后会调用回调函数
          () => {
            //  触发该函数得到颜值的数据
            this.getFaceInfo()
          })
      }
    })
  },
  // 选择图片
  choosePhoto() {
    wx.chooseImage({
      count: 1,
      sizeType: ['original'],
      sourceType: ['album'],
      success: res => {
        if (res.errMsg === 'chooseImage:ok' && res.tempFilePaths.length !== 0) {
          this.setData({
              src: res.tempFilePaths[0]
            },
            //  成功赋值之后会调用回调函数
            () => {
              //  触发该函数得到颜值的数据
              this.getFaceInfo()
            })
        }
      }
    })
  },
  // 重选图片
  reChoose() {
    this.setData({
      src: '',
      faceinfo:'',
      token:''
    })
  },
  // 获取颜值数据
  getFaceInfo() {
    // 1. 获取 token
    wx.request({
      url: 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=XPaxl3ULNWR9cVNGnQjzE3Et&client_secret=2mQgRbYCgqGvX4mluLAhK0ZGl8EHO2eR',
      method: 'post',
      success: res => {
        this.setData({
          // 为token赋值
          token: res.data.access_token
        }, () => {
          // 赋值成功后产生的回调
          // 处理请求需要携带的参数
          this.processParams()
        })
      }
    })

  },
  // 2.组织参数
  processParams() {
    const params = {
      // 图片
      image: '',
      // 发送到服务器的图片格式 选择base64
      image_type: 'BASE64',
      // 希望颜值检测完毕后 服务器返回哪些颜值数据
      face_field: 'age,beauty,gender,expression,glasses,emotion'
    }
    // 根据图片的路径 把图片转为base64 格式 然后赋值给params.img
    const fileManager = wx.getFileSystemManager()
    fileManager.readFile({
      // 要读那个文件
      filePath: this.data.src,
      // 以什么格式来读取指定的文件
      encoding: 'base64',
      success: res => {
        params.image = res.data
        // 发送请求 检测颜值数据
        this.testFace(params)
      }
    })
  },
  // 3 .发起请求 得到颜值数据
  testFace(params) {
    wx.showLoading({
      title: '颜值检测中...',
    })
    wx.request({
      // 请求地址
      url: 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token=' + this.data.token,
      // 请求方法
      method: 'post',
      // 请求头
      header: {
        'Content-Type': 'application/json'
      },
      // 请求参数
      data: params,
      // 请求成功后执行的函数
      success: res => {
        if (res.errMsg === 'request:ok' && res.data.result !== null && res.data.result.face_num !== 0) {
          // console.log("人脸数据是:");
          // console.log(res.data.result.face_list[0]);
          this.setData({
            faceinfo: res.data.result.face_list[0]
          })
        } else {
          wx.showToast({
            title: '颜值测试失败',
            icon: "error",
            duration: 2000 //持续的时间
          })
        }
      },
      complete:()=>{
        wx.hideLoading()
      }
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})